www.gusucode.com > matlab最优化程序源码---书籍 > matlab最优化程序/光盘程序/第6章 无约束一维极值问题/minFBNQ.m
function [x,minf] = minFBNQ(f,a,b,delta,eps) format long; if nargin == 4 eps = 1.0e-6; end F = ones(2,1); N = (b-a)/eps; c = F(2) - N; n = 2; while c<0 n = n+1; F(n) = F(n-1) + F(n-2); c = F(n) - N; end l = a + F(n-2)*(b-a)/F(n); u = a + F(n-1)*(b-a)/F(n); k=1; while 1 fl = subs(f , findsym(f), l); fu = subs(f , findsym(f), u); if fl > fu a = l; l = u; u = a + F(n-k-1)*(b-a)/F(n-k); if (k == n - 3) break; else k = k+1; end else b = u; u = l; l = a + F(n-k-2)*(b-a)/F(n-k); if ( k == n-3 ) break; else k = k+1; end end end if k == 100000 disp('找不到最小值!'); x = NaN; minf = NaN; return; end u = l + delta; fl = subs(f , findsym(f), l); fu = subs(f , findsym(f), u); if fl > fu a = l; else b = l; end x = (a+b)/2; minf = subs(f , findsym(f), x); format short;